#include "ShareMemory.hpp"

int main()
{
    shm.CreateSHM();
    shm.Attach();
    std::cout <<"Server Attach" << std::endl;
    // sleep(5);
    mypipe.OpenForRead();
    ////////////////
    //在此通信
    char* buffer = (char*)shm.GetAddr();
    int i = 0;
    while(true)
    {
        mypipe.Wait(); //使用管道做阻塞式的读

        printf("%s\n",buffer); //从共享内存中读
        sleep(4);
    }
    ////////////////
    shm.DeAttach();
    std::cout <<"Server DeAttach" << std::endl;
    // sleep(5);
    shm.DeleteSHM();
    std::cout <<"Server delete" << std::endl;

    return 0;
}


// std::string KeyToX(int key)
// {
//     char buffer[64];
//     snprintf(buffer, sizeof(buffer), "%#X", key);
//     return buffer;
// }

// const std::string gpathName = "/home/wk/linux"; // 路径名可随意指定
// const int gpro_id = 101;                        // 项目id随便指定
// const int gSize = 4096;
// const mode_t gmode = 0600;

// int main()
// {
//     // 1.获取一个key
//     key_t key = ftok(gpathName.c_str(), gpro_id);
//     printf("key:%#X\n", key);
//     // 2. 创建共享内存
//     int shmid = shmget(key, gSize, IPC_CREAT | IPC_EXCL | gmode);
//     if (shmid == -1)
//         std::cout << "创建shm失败" << std::endl;
//     else
//         std::cout << "创建成功:shmid: " << shmid << std::endl;
//     // 3. 挂接到当前进程
//     void *addr = shmat(shmid, nullptr, 0);
//     if ((long long)addr == -1)
//         std::cout << "挂接失败" << std::endl;
//     else
//         printf("挂接成功：%p\n", addr);
//     sleep(5);
//     //4. 去关联
//     int ret = shmdt(addr);
//     if (ret == -1)
//         std::cout << "去关联失败" << std::endl;
//     else
//         std::cout << "去关联成功" << std::endl;
//     sleep(3);
//     // 5.删除
//     int del = shmctl(shmid,IPC_RMID,nullptr);
//     if(del == -1)
//         std::cout <<"删除失败" << std::endl;
//     else
//         std::cout <<"删除成功" << std::endl;
//     return 0;
// }